package br.ucb.sigplan.util;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map.Entry;

import br.ucb.sigplan.beans.Atividade;
import br.ucb.sigplan.beans.Calendario;
import br.ucb.sigplan.beans.Conteudo;
import br.ucb.sigplan.beans.Cronograma;
import br.ucb.sigplan.crud.CalendarioCrud;
import br.ucb.sigplan.crud.CronogramaCrud;

public class CronogramaUtil {
	public static void adicionaConteudosAtividade(Cronograma cronograma, Cronograma cronogramaBanco, Integer idPlano) {
		Atividade atividade;
		for (Entry<Atividade, List<Conteudo>> entry : cronogramaBanco.getCronograma().entrySet()) {
			atividade = entry.getKey();
			for (Conteudo conteudo : entry.getValue()) {
				if (!cronograma.getCronograma().get(atividade).contains(conteudo)) {
					CronogramaCrud.insert(atividade, conteudo, idPlano);
				}
			}
		}
	}
	
	public static void deleteConteudosAtividade(Cronograma cronograma, Cronograma cronogramaBanco, Integer idPlano) {
		Atividade atividade;
		for (Entry<Atividade, List<Conteudo>> entry : cronograma.getCronograma().entrySet()) {
			atividade = entry.getKey();
			for (Conteudo conteudo : entry.getValue()) {
				if (!cronogramaBanco.getCronograma().get(atividade).contains(conteudo)) {
					CronogramaCrud.delete(atividade, conteudo, idPlano);
				}
			}
		}
	}
	
	public static Cronograma getFeriadosTurma(List<Conteudo> conteudos, List<Atividade> atividades) {
		Cronograma cronograma = new Cronograma();
		List<Atividade> atividadesFeriado = new ArrayList<Atividade>();
		List<Calendario> feriados = CalendarioCrud.findDatas('F');
		for (Atividade atividade : atividades) {
			if (DataUtil.isFeriado(atividade.getData().getTime())) {
				cronograma.addCronograma(atividade, getConteudo(getDescricao(feriados, atividade.getData()), conteudos));
				atividadesFeriado.add(atividade);
			}
		}
		removeFeriados(atividadesFeriado,atividades);
		return cronograma;
	}
	
	public static void removeFeriados(List<Atividade> feriados, List<Atividade> atividades) {
		for (Atividade feriado : feriados) {
			atividades.remove(feriado);
		}
	}
	
	public static Conteudo getConteudo(String descricao, List<Conteudo> conteudos) {
		for (Conteudo conteudo : conteudos) {
			if (conteudo.getDescricao().equalsIgnoreCase(descricao)) {
				return conteudo;
			}
		}
		return null;
	}
	
	public static String getDescricao(List<Calendario> feriados, Calendar data) {
		for (Calendario calendario : feriados) {
			if (calendario.getData().equals(data)) {
				return calendario.getDescricao();
			}
		}
		return null;
	}
}
